#include <sw/redis++/redis.h>
#include <iostream>
#include <string>
#include <thread>
#include <gflags/gflags.h>

DEFINE_bool(redis_kepp_alive,true,"是否保持长连接");
DEFINE_int32(redis_db,0,"redis库号");
DEFINE_int32(redis_port,6379,"redis服务器端口");
DEFINE_string(redis_host,"127.0.0.1","redis服务器IP地址");

std::shared_ptr<sw::redis::Redis> predis;
void add(){
    predis->set("用户会话 1","用户ID1");
    predis->set("用户会话 2","用户ID2",
    std::chrono::milliseconds(1000));
    predis->set("用户会话 3", "用户 ID3");
    predis->set("用户会话 4", "用户 ID4");
    predis->set("用户会话 5", "用户 ID5");
}
void get(){
    auto res1 = predis->get("用户会话 1");
    if (res1) std::cout << *res1 << std::endl;
    auto res2 = predis->get("用户会话 2");
    if (res2) std::cout << *res2 << std::endl;
    auto res3 = predis->get("用户会话 3");
    if (res3) std::cout << *res3 << std::endl;
    auto res4 = predis->get("用户会话 4");
    if (res4) std::cout << *res4 << std::endl;
    auto res5 = predis->get("用户会话 5");
    if (res5) std::cout << *res5 << std::endl;


}

void update(){
    predis->set("用户会话 1", "用户 ID 变成 31");
    predis->set("用户会话 4", "用户 ID 变成 41", 
    std::chrono::milliseconds(1000));
    predis->del("用户会话 5");
}

void push_test(){
    predis->rpush("群聊会话 1", "成员 1");
    predis->rpush("群聊会话 1", "成员 2");
    predis->rpush("群聊会话 1", "成员 3");
    predis->rpush("群聊会话 1", "成员 4");
    predis->rpush("群聊会话 1", "成员 5");
    
    predis->rpush("群聊会话 2", "成员 6");
    predis->rpush("群聊会话 2", "成员 7");
    predis->rpush("群聊会话 2", "成员 8");
    predis->rpush("群聊会话 2", "成员 9");
    predis->rpush("群聊会话 2", "成员 0");

    std::vector<std::string> res;
    predis->lrange("群聊会话 1",0,-1,std::back_inserter(res));
    for(const auto &r : res){
        std::cout<<r<<std::endl;
    }


}


int main()
{
    sw::redis::ConnectionOptions opts;
    opts.host = FLAGS_redis_host;
    opts.port = FLAGS_redis_port;
    opts.db = FLAGS_redis_db;
    opts.keep_alive = FLAGS_redis_kepp_alive;
    predis = std::make_shared<sw::redis::Redis>(opts);
    std::cout << "--------add-------\n";
    add();
    std::cout << "--------get-------\n";
    get();
    std::cout << "--------2s get-------\n";
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::cout << "--------update-------\n";
    update();
    std::cout << "--------2s get-------\n";
    std::this_thread::sleep_for(std::chrono::seconds(2));
    get();
    std::cout << "--------push-------\n";
    push_test();





    return 0;
}

